package main

import (
	"encoding/json"
	"flag"
	"fmt"
	"io"
	"net/http"
	"os"
)

// Zone表示Cloudflare区域信息
type Zone struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

// ZonesResponse表示Cloudflare API的响应
type ZonesResponse struct {
	Success bool   `json:"success"`
	Errors  []any  `json:"errors"`
	Result  []Zone `json:"result"`
}

func main() {
	apiToken := flag.String("token", "", "您的Cloudflare API令牌")
	flag.Parse()

	if *apiToken == "" {
		fmt.Println("请提供Cloudflare API令牌，使用 -token 参数")
		fmt.Println("例如: go run get_zone_id.go -token YOUR_API_TOKEN")
		os.Exit(1)
	}

	// 创建请求
	req, err := http.NewRequest("GET", "https://api.cloudflare.com/client/v4/zones", nil)
	if err != nil {
		fmt.Printf("创建请求失败: %v\n", err)
		os.Exit(1)
	}

	// 设置请求头
	req.Header.Set("Authorization", "Bearer "+*apiToken)
	req.Header.Set("Content-Type", "application/json")

	// 发送请求
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Printf("发送请求失败: %v\n", err)
		os.Exit(1)
	}
	defer resp.Body.Close()

	// 读取响应
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Printf("读取响应失败: %v\n", err)
		os.Exit(1)
	}

	// 解析响应
	var zonesResponse ZonesResponse
	err = json.Unmarshal(body, &zonesResponse)
	if err != nil {
		fmt.Printf("解析响应失败: %v\n", err)
		os.Exit(1)
	}

	// 检查是否成功
	if !zonesResponse.Success {
		fmt.Println("API请求失败")
		fmt.Printf("错误: %v\n", zonesResponse.Errors)
		os.Exit(1)
	}

	// 打印结果
	fmt.Println("您的Cloudflare Zone IDs:")
	fmt.Println("=========================")
	for _, zone := range zonesResponse.Result {
		fmt.Printf("域名: %s\nZone ID: %s\n\n", zone.Name, zone.ID)
	}
} 